import Vue from 'vue'
import App from './App.vue'
import router from './router'


// 引入axios异步请求插件
import axios from 'axios'
import VueAxios from 'vue-axios'

// 引入vue-cookie插件
import VueCookies from 'vue-cookies'

// 引入rem的基准值依赖
import 'lib-flexible/flexible'

// 从vant引入组件
import {
  Tabbar,
  TabbarItem,
  Search,
  GoodsAction,
  GoodsActionIcon,
  GoodsActionButton,
  Icon,
  Stepper,
  Toast,
  NavBar,
  Button,
  Form,
  Field,
  Popup,
  SwipeCell,
  cell,
  Checkbox,
  CheckboxGroup,
  SubmitBar,
  Empty,
  AddressList,
  AddressEdit,
  Area,
  PasswordInput,
  NumberKeyboard,
  Dialog,
  Uploader,
  List,
  Tab,
  Tabs,
  Swipe,
  SwipeItem,
  Lazyload,
  Cell,
  CellGroup
} from 'vant';

// 注册从vant引入的组件
Vue.use(Tabbar)
  .use(TabbarItem)
  .use(Search)
  .use(GoodsAction)
  .use(GoodsActionButton)
  .use(GoodsActionIcon)
  .use(Icon)
  .use(Stepper)
  .use(Toast)
  .use(NavBar)
  .use(Form)
  .use(Field)
  .use(Popup)
  .use(SwipeCell)
  .use(cell)
  .use(Checkbox)
  .use(CheckboxGroup)
  .use(SubmitBar)
  .use(Empty)
  .use(AddressList)
  .use(AddressEdit)
  .use(Area)
  .use(PasswordInput)
  .use(Dialog)
  .use(NumberKeyboard)
  .use(Uploader)
  .use(List)
  .use(Tab)
  .use(Tabs)
  .use(Swipe)
  .use(SwipeItem)
  .use(Lazyload)
  .use(Cell)
  .use(CellGroup)
  .use(Button);



// 注册axios
Vue.use(VueAxios, axios)
// 注册 vue-cookie插件
Vue.use(VueCookies)

// 开发模式下设置为false 
Vue.config.productionTip = false

// 配置请求基础路径
axios.defaults.baseURL = "http://www.kangliuyong.com:10002"

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 
  // 配置get和post请求方式

  // 因为需要多处用到appkey, 为方便 所以使用appkey存值
  let appkey = 'U2FsdGVkX19WSQ59Cg+Fj9jNZPxRC5y0xB1iV06BeNA='

  if (config.method === 'get') {
    config.params = config.params || {};
    config.params.appkey = appkey
  } else if (config.method === 'post') {
    // 当请求方式是post的时候params就变成了data
    config.data = config.data || {};
    // post请求参数格式应该是 key1=value1&key2=value2...
    // 
    // 

    // 转换data的格式
    let paramsString = "";
    for (let key in config.data) {
      paramsString += `${key}=${config.data[key]}&`
    }
    // 此处需要注意  `appkey=${appkey}`在拼接的时候 不要加通过不然post请求参数将多出两个空格而发生错误
    paramsString += `appkey=${appkey}`
    config.data = paramsString;
    // 
    // 
  }
  // 我要启动加载提示
  Toast.loading({
    message: '加载中...',
    // 这个true是防止在加载中还被频繁点击
    forbidClick: true,
    // 0: 加载不会自动关闭
    duration: 0
  });
  return config;
}, function (error) {
  // 对请求错误做些什么
  Toast.clear();

  return Promise.reject(error);
});



// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  Toast.clear();
  return response;
}, function (error) {
  // 对响应错误做点什么
  Toast.clear();
  return Promise.reject(error);
});



// 解决登录报错
import Router from 'vue-router'
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}


new Vue({
  router,
  render: h => h(App)
}).$mount('#app')